Speech applications, which generally refer to applications that process speech, have undergone rapid advancement in recent years and are finding widespread use in many different areas. One widespread use of speech applications is in “call handling.” A common example of call handling applications is automated directory assistance. Automated directory assistance is being used by businesses more and more commonly to handle incoming telephone calls requesting information. An automated directory assistance application may receive a spoken request from a telephone caller for information, such as a telephone number, recognize the caller's speech to identify the requested information, and provide the requested information to the caller using recorded or synthesized speech. For instance, automated directory assistance may be incorporated into a company's telephone network to allow callers to retrieve telephone extension numbers of employees. In another example, a telephone service provider provides automated directory assistance to look up telephone numbers requested by users. Such a system might be implemented, for example, in a call center associated with a telephone network, such as a public switched telephone network (PSTN), a voice over Internet Protocol (VoIP) network, etc.
However, ambiguous situations sometimes arise when several entries match a request from a caller, and thus, additional constraints from the caller are needed to help narrow down the result. Examples of such disambiguation situations include selecting from a list of matching flights in a flight reservation system, choosing a restaurant from a list of matching restaurants in a dining guide application, providing disambiguating information to narrow down the desired listing in a directory assistance application, etc.
Many speech applications have designed and developed custom disambiguation strategies, applicable only to a particular application instance or domain. To design a custom disambiguation strategy, the entire list of possible dialog paths and dialog states has to be enumerated at design time. At runtime, an incoming request from a caller and/or data retrieved in response to the incoming request are compared to the static list of possible dialog paths and dialog states for determining if disambiguation is needed. If disambiguation is needed, then a predefined disambiguation prompt is played out to the caller. However, the above approach is fraught with problems. First, it is cumbersome to pre-specify all the states since the number of all possible dialog paths and dialog states may be prohibitively large. Further, by designing and coding a specific dialog strategy, it becomes infeasible, if not impossible, to modify the dialog behavior later without significant code modifications.